﻿//Created by Action Script Viewer - http://www.buraks.com/asv
package de.polygonal.ds.sort {
    import de.polygonal.ds.*;

    public function dLinkedMergeSortCmp(_arg1:DListNode, _arg2:Function, _arg3:Boolean=false):DListNode{
        var _local5:DListNode;
        var _local6:DListNode;
        var _local7:DListNode;
        var _local8:DListNode;
        var _local10:int;
        var _local11:int;
        var _local12:int;
        var _local13:int;
        if (((!(_arg1)) || ((_arg2 == null)))){
            return (null);
        };
        var _local4:DListNode = _arg1;
        var _local9 = 1;
        if (_arg3){
            while (true) {
                _local5 = _local4;
                _local8 = null;
                _local4 = _local8;
                _local10 = 0;
                while (_local5) {
                    _local10++;
                    _local13 = 0;
                    _local11 = 0;
                    _local6 = _local5;
                    while (_local13 < _local9) {
                        _local11++;
                        _local6 = _local6.next;
                        if (!_local6){
                            break;
                        };
                        _local13++;
                    };
                    _local12 = _local9;
                    while ((((_local11 > 0)) || ((((_local12 > 0)) && (_local6))))) {
                        if (_local11 == 0){
                            _local7 = _local6;
                            _local6 = _local6.next;
                            _local12--;
                        } else {
                            if ((((_local12 == 0)) || (!(_local6)))){
                                _local7 = _local5;
                                _local5 = _local5.next;
                                _local11--;
                            } else {
                                if (_arg2(_local5.data, _local6.data) >= 0){
                                    _local7 = _local5;
                                    _local5 = _local5.next;
                                    _local11--;
                                } else {
                                    _local7 = _local6;
                                    _local6 = _local6.next;
                                    _local12--;
                                };
                            };
                        };
                        if (_local8){
                            _local8.next = _local7;
                        } else {
                            _local4 = _local7;
                        };
                        _local7.prev = _local8;
                        _local8 = _local7;
                    };
                    _local5 = _local6;
                };
                _arg1.prev = _local8;
                _local8.next = null;
                if (_local10 <= 1){
                    return (_local4);
                };
                _local9 = (_local9 << 1);
            };
        };
        _local5 = _local4;
        _local8 = null;
        _local4 = _local8;
        _local10 = 0;
        while (_local5) {
            _local10++;
            _local13 = 0;
            _local11 = 0;
            _local6 = _local5;
            while (_local13 < _local9) {
                _local11++;
                _local6 = _local6.next;
                if (!_local6){
                    break;
                };
                _local13++;
            };
            _local12 = _local9;
            while ((((_local11 > 0)) || ((((_local12 > 0)) && (_local6))))) {
                if (_local11 == 0){
                    _local7 = _local6;
                    _local6 = _local6.next;
                    _local12--;
                } else {
                    if ((((_local12 == 0)) || (!(_local6)))){
                        _local7 = _local5;
                        _local5 = _local5.next;
                        _local11--;
                    } else {
                        if (_arg2(_local5.data, _local6.data) <= 0){
                            _local7 = _local5;
                            _local5 = _local5.next;
                            _local11--;
                        } else {
                            _local7 = _local6;
                            _local6 = _local6.next;
                            _local12--;
                        };
                    };
                };
                if (_local8){
                    _local8.next = _local7;
                } else {
                    _local4 = _local7;
                };
                _local7.prev = _local8;
                _local8 = _local7;
            };
            _local5 = _local6;
        };
        _arg1.prev = _local8;
        _local8.next = null;
        if (_local10 <= 1){
            return (_local4);
        };
        _local9 = (_local9 << 1);
        //unresolved jump
    }
}//package de.polygonal.ds.sort 
